//
//  CustomDefineHeader.h
//  LearningSystemMEE
//
//  Created by heyong on 16/3/28.
//  Copyright © 2016年 bjttsx. All rights reserved.
//

#ifndef CustomDefineHeader_h
#define CustomDefineHeader_h
/*
 *  百度map访问key
 */
#define DEF_BDMAP_API_AK   @"HO1gZjz3jlGyVK3KV4elmWQnBldQ3x3P"

/**
 *  获取主屏的高
 */
#define DEF_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height

/**
 *  获取主屏的宽
 */

#define DEF_SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

/**
 *  设置比例
 */
#define BIZ (DEF_SCREEN_WIDTH/375.0)

/**
 *  设置比例2
 */
#define BIZ_W (375.0/DEF_SCREEN_WIDTH)

//高
#define BIH(h) h*BIZ
//宽
#define BIW(w) w*BIZ

#define CGRECTS(x,y,w,h) CGRectMake(x*BIZ,y*BIZ,w*BIZ,h*BIZ)

/**
 * 获取主屏的size
 */
#define DEF_SCREEN_SIZE [[UIScreen main] bounds].size

/**
 *  获取视图宽度
 *
 *  @param view 视图对象
 *
 *  @return 宽度
 */
#define DEF_WIDTH(view) view.bounds.size.width

/**
 * 获取视图高度
 *
 * @param view 视图对象
 *
 * @return 高度
 */
#define DEF_HEIGHT(view) view.bounds.size.height

/**
 * 获取视图原点横坐标
 *
 * @param view 视图对象
 *
 * @return 远点横坐标
 */
#define DEF_X(view) view.frame.origin.x

/**
 * 获取视图原点纵坐标
 *
 * @param view 视图对象
 *
 * @return 远点纵坐标
 */
#define DEF_Y(view) view.frame.origin.y

/**
 *    生成RGB颜色
 *
 *    @param     red     red值（0~255）
 *    @param     green     green值（0~255）
 *    @param     blue     blue值（0~255）
 *
 *    @return    UIColor对象
 */
#define DEF_RGB_COLOR(_red, _green, _blue) [UIColor colorWithRed:(_red)/255.0f green:(_green)/255.0f blue:(_blue)/255.0f alpha:1]

/**
 *    生成RGBA颜色
 *
 *    @param     red     red值（0~255）
 *    @param     green     green值（0~255）
 *    @param     blue     blue值（0~255）
 *    @param     alpha     blue值（0~1）
 *
 *    @return    UIColor对象
 */
#define DEF_RGBA_COLOR(_red, _green, _blue, _alpha) [UIColor colorWithRed:(_red)/255.0f green:(_green)/255.0f blue:(_blue)/255.0f alpha:(_alpha)]

/**
 *  判断屏幕尺寸是否为640*1136
 *
 *    @return    判断结果（YES:是 NO:不是）
 */
#define DEF_SCREEN_IS_640_1136 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

/**
 *
 *  得到屏幕frame
 */
#define DEF_SCREEN_FRAME CGRectMake(0, 64, DEF_SCREEN_WIDTH, DEF_SCREEN_HEIGHT)

/**
 *
 *  数据库名称
 */
#define DEF_DB @"nsc_store.db"
/*
 *  沙盒地址
 */
#define  DEF_SEARCHPATH [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]

#define DEFIP DEF_PERSISTENT_GET_OBJECT(@"SAVEIP")

/**
 *
 *  数据库地址
 */
#define  DEF_DB_DATABASEPATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:DEF_DB]

/*
 *  文件地址
 */
#define  DEF_FILE_PATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"filePath"]

/*
 *  拍照地址
 */
#define  DEF_IMAGEFILE_PATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"imageFile"]

/*
 *  PDF地址
 */
#define  DEF_FILE_PDF_PATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"pdfPath"]

// 分别是方法地址，文件名，在文件的第几行，自定义输出内容
#define DeLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )


#define DEFROLE DEF_PERSISTENT_GET_OBJECT(@"role")
/**
 *    永久存储对象
 *
 *  NSUserDefaults保存的文件在tmp文件夹里
 *
 *    @param    object      需存储的对象
 *    @param    key         对应的key
 */
#define DEF_PERSISTENT_SET_OBJECT(object, key)                                                                                                 \
({                                                                                                                                             \
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];                                                                          \
[defaults setObject:object forKey:key];                                                                                                    \
[defaults synchronize];                                                                                                                    \
})

/**
 *    取出永久存储的对象
 *    @param    key     所需对象对应的key
 *    @return    key     所对应的对象
 */
#define DEF_PERSISTENT_GET_OBJECT(key)  [[NSUserDefaults standardUserDefaults] objectForKey:key]
#define PROID DEF_PERSISTENT_GET_OBJECT(@"proid")
#define PROTYPE DEF_PERSISTENT_GET_OBJECT(@"proType")
#define USERID DEF_PERSISTENT_GET_OBJECT(@"userid")
#define USERROLE DEF_PERSISTENT_GET_OBJECT(@"role")

/**
 *  清除 NSUserDefaults 保存的所有数据
 */
#define DEF_PERSISTENT_REMOVE_ALLDATA   [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]


/**
 *  清除 NSUserDefaults 保存的指定数据
 */
#define DEF_PERSISTENT_REMOVE(_key)                                         \
({                                                                          \
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];       \
[defaults removeObjectForKey:_key];                                     \
[defaults synchronize];                                                 \
})

// rgb颜色转换颜色    UIColorFromRGB(0xFFFFFF);
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

// 主标题颜色
#define mainTitleColor UIColorFromRGB(0x333333)

// 副标题颜色
#define subtitleColor UIColorFromRGB(0x666666)

// 其他颜色
#define otherColor UIColorFromRGB(0xaaaaaa);

// 分割线颜色
#define separator_Color UIColorFromRGB(0xeeeeee);

/**
 *  得到缓存数据大小
 */
#define DEF_CACHE_SIZE  [self folderSizeAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject] + [self folderSizeAtPath:NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject] + [self folderSizeAtPath:NSTemporaryDirectory()];

#define WEAKSELF typeof(self) __weak weakSelf = self;


/*
 **Appdelegate
 */
#define ShareApplicationDelegate [UIApplication sharedApplication].delegate

/**
 *  附件宏  -----begin
 */
#define kPadding 10
#define kPhotoViewTagOffset 1000
#define kPhotoViewIndex(photoView) ([photoView tag] - kPhotoViewTagOffset)
#define kDevice_Is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define kScreen_Width [UIScreen mainScreen].bounds.size.width
#define kTweetSendImageCCell_Width floorf((kScreen_Width - 10*2- 10*3)/2)
#define kTweetSendImageCCell_height floorf((kScreen_Width - 10*2- 10*3)/3)
#define kMarginTop  (8)
#define kGapH   (6)
#define kGapV   (6)

#define kTitleLeft  kPaddingLeftWidth
#define kTitleTop   kMarginTop
#define kTitleWidth   kScreen_Width - kTitleLeft * 2
#define kTitleHeight    (20)

#define kMediaViewTop   (kTitleTop+kTitleHeight+kGapV)

#define WEAKSELF typeof(self) __weak weakSelf = self;
#define kTipAlert(_S_, ...)     [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:(_S_), ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil] show]
#define kKeyWindow [UIApplication sharedApplication].keyWindow
#define kScreen_Bounds [UIScreen mainScreen].bounds
#define kScreen_Height [UIScreen mainScreen].bounds.size.height
#define kScreen_Width [UIScreen mainScreen].bounds.size.width
#define kPaddingLeftWidth 15.0
#define kLoginPaddingLeftWidth 18.0
#define kMySegmentControl_Height 44.0
#define kMySegmentControlIcon_Height 70.0

#define  kBackButtonFontSize 16
#define  kNavTitleFontSize 19
#define  kBadgeTipStr @"badgeTip"


#define ESStrong_DoNotCheckNil(weakVar, _var) __typeof(&*weakVar) _var = weakVar
#define ESStrong(weakVar, _var) ESStrong_DoNotCheckNil(weakVar, _var); if (!_var) return;
#define ESWeak(var, weakVar) __weak __typeof(&*var) weakVar = var

#define ESWeak_(var) ESWeak(var, weak_##var);
#define ESStrong_(var) ESStrong(weak_##var, _##var);

/** defines a weak `self` named `__weakSelf` */
#define ESWeakSelf      ESWeak(self, __weakSelf);
/** defines a strong `self` named `_self` from `__weakSelf` */
#define ESStrongSelf    ESStrong(__weakSelf, _self);

#define kDocument_String [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]

#define kNormalFontSize 15
/**
 *  附件宏  -----end
 */

/**
 *  控制展开or收缩
 */
#define DIC_EXPANDED @"expanded" //是否是展开 0收缩 1展开
#define DIC_ARARRY @"array"
#define DIC_TITILESTRING @"title"
#define CELL_HEIGHT 46.0f

/**
 * 工作记录类型——巡视
 */
#define WORDRECORD_TYPE_PATROL @"RECORD_01";
/**
 * 工作记录类型——旁站——通用
 */
#define WORDRECORD_TYPE_SIDE_TONGYONG @"RECORD_SIDE_02_01";
/**
 * 工作记录类型——旁站——卷材防水
 */
#define WORDRECORD_TYPE_SIDE_JUANCAIFANGSHUI @"RECORD_SIDE_02_02";
/**
 * 工作记录类型——旁站——回填土
 */
#define WORDRECORD_TYPE_SIDE_HUITIANTU @"RECORD_SIDE_02_03";
/**
 * 工作记录类型——旁站——混凝土施工
 */
#define WORDRECORD_TYPE_SIDE_HUNNINGTU_SHIGONG @"RECORD_SIDE_02_04";
/**
 * 工作记录类型——旁站——混凝土灌注桩
 */
#define WORDRECORD_TYPE_SIDE_HUNNINGTU_GUANZHUZHUANG @"RECORD_SIDE_02_05";
/**
 * 工作记录类型——安全
 */
#define WORDRECORD_TYPE_SAFE @"RECORD_03";
/**
 * 工作记录类型——其他
 */
#define WORDRECORD_TYPE_OTHER @"RECORD_04";
/**
 * 工作记录类型——签到
 */
#define WORDRECORD_TYPE_SIGNIN @"RECORD_05";
/**
 * 工作记录类型——签退
 */
#define WORDRECORD_TYPE_SIGNOUT @"RECORD_06";

/**
 * 附件类型——代办管理——督办
 */
#define ATTACH_TYPE_PROCESS_SUPERVISE  "PROCESS_01";
/**
 * 附件类型——代办管理——跟进
 */
#define ATTACH_TYPE_PROCESS_FOLLOW  "PROCESS_02";
/**
 * 附件类型——代办管理——验收
 */
#define ATTACH_TYPE_PROCESS_CHECK  "PROCESS_03";
/**
 * 附件类型——巡视
 */
#define ATTACH_TYPE_PATROL  "RECORD_PATROL_01";
/**
 * 附件类型——安全——监理安全巡查
 */
#define ATTACH_TYPE_SECURITY_PATROL  "SAFE_RECORD_01";
/**
 * 附件类型——安全——施工三类人员
 */
#define ATTACH_TYPE_SECURITY_THREE_PEOPLE  "SAFE_RECORD_02";
/**
 * 附件类型——安全——危险性较大工程
 */
#define ATTACH_TYPE_SECURITY_DANGEROUS_WORK  "RECORD_PATROL_03";
/**
 * 附件类型——安全——特种作业人员持证情况
 */
#define ATTACH_TYPE_SECURITY_PERPLE_CERTIFICATE  "SAFE_RECORD_04";
/**
 * 附件类型——安全——施工设备进场验收设备
 */
#define ATTACH_TYPE_SECURITY_CHECK_DEVICE  "SAFE_RECORD_05";

/**
 * 附件类型未上传
 */
#define ATTACH_UPLOADSTATE_UPLOAD_NO  0;
/**
 * 附件类型已上传
 */
#define ATTACH_UPLOADSTATE_UPLOAD_YES  1;

/**
 * 附件图片整改状态——整改前
 */
#define RECIFY_STATE_NO  "0";
/**
 * 附件图片整改状态——整改后
 */
#define RECIFY_STATE_YES  "1";



//判断系统
//#define iOS8Later ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f)
// iOS10适配
#define iOS8Later (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_8_0)

/**
 * 流程类型——督办(1)
 */
#define PROCESS_TYPE_SUPERVISE  1
/**
 * 流程类型——跟进(2)
 */
#define PROCESS_TYPE_FOLLOW  2
/**
 * 流程类型——验收(3)
 */
#define PROCESS_TYPE_CHECK  3

/**
// * 流程阶段——待审阅(21)
// */
//#define PROCESS_STAGE_REVIEW  21
///**
// * 流程阶段——审阅不通过(202)
// */
//#define PROCESS_STAGE_REVIEW_PASS_NO  202 //交建220
///**
// * 流程阶段——待复查(221)
// */
//#define PROCESS_STAGE_CHECK  221
///**
// * 流程阶段——复查通过(231)
// */
//#define PROCESS_STAGE_CHECK_PASS_YES  231
///**
// * 流程阶段——结束(24)
// */
//#define PROCESS_STAGE_END  24
///**
// * 流程阶段——执行(3)
// */
//#define PROCESS_STAGE_DOING  3


/**
 * 流程阶段——发起
 */
#define PROCESS_STAGE_START  1
/**
 * 流程阶段——待审阅
 */
#define PROCESS_STAGE_REVIEW  2
/**
 * 流程阶段——待执行
 */
#define PROCESS_STAGE_DOING  3
/**
 * 流程阶段——待复查
 */
#define PROCESS_STAGE_CHECK  4
/**
 * 流程阶段——已结束
 */
#define PROCESS_STAGE_END 5
/**
 * 流程阶段——审阅通过
 */
#define PROCESS_STAGE_REVIEW_PASS_YES 201
/**
 * 流程阶段——审阅不通过
 */
#define PROCESS_STAGE_REVIEW_PASS_NO 202

/**
 * 流程阶段——复查通过
 */
#define PROCESS_STAGE_CHECK_PASS_YES 401
/**
 * 流程阶段——复查不通过
 */
#define PROCESS_STAGE_CHECK_PASS_YES_NO 402















/**
 * 问题类型——巡视(1)
 */
#define PROBLEM_TYPE_SCOUT 1
/**
 * 问题类型——旁站(2)
 */
#define PROBLEM_TYPE_SITE 2
/**
 * 问题类型——安全(3)
 */
#define PROBLEM_TYPE_SAFE 3
/**
 * 问题类型——其他(4)
 */
#define PROBLEM_TYPE_OTHER 4


/**
 * 发送形式——工作联系单(1)
 */

#define SEND_TYPE_CONTACTLIST  1

/**
 * 发送形式——监理通知单(2)
 */
#define SEND_TYPE_SUPERVISIONNOTICE  2

/**
 * 发送形式——工程暂停令(3)
 */

#define SEND_TYPE_STOPLIST  3

/**
 * 发送形式——无(4)
 */
#define SEND_TYPE_NULL  4


/**
 * 审阅状态——未审核(0)
 */
#define REVIEW_STATE_UNPASS  0

/**
 * 审阅状态——审核通过(1)
 */
#define REVIEW_STATE_PASS_YES  1

/**
 * 审阅状态——审核不通过(2)
 */
#define REVIEW_STATE_PASS_NO  2

#define DEFISNUL(obj) obj==nil?@"":obj


#pragma mark -----------监理二期往下写------------------

/**
 * 附件类型--见证取样--二维码
 */

#define ATTACH_TYPE_SAMPLE_QR_CODE = "SAMPLE_QR_CODE_01"
/**
 * 附件类型--见证取样--附件
 */
#define ATTACH_TYPE_SAMPLE = "SAMPLE_01"

/**
 * 附件类型--工程巡检
 */
#define ATTACH_TYPE_INSPECT = "INSPECT_01"


/**
 * 待巡检（分配完巡检任务之后）
 */
#define INSPECTSTATE_INSPECT_STATE_1   = "1"

/**
 * 待汇总（实施完巡检任务之后）
 */
#define INSPECTSTATE_INSPECT_STATE_2   = "2"

/**
 * 待整改（汇总完后发送给项目总监）
 */
#define INSPECTSTATE_INSPECT_STATE_3   = "3"

/**
 * 待审核（项目总监整改完之后）
 */
#define INSPECTSTATE_INSPECT_STATE_4   = "4"

/**
 * 整改合格
 */
#define INSPECTSTATE_INSPECT_STATE_501   = "501"

/**
 * 整改不合格待整改
 */
#define INSPECTSTATE_INSPECT_STATE_502   = "502"

/**
 * 整改不合格之后整改完待审核
 */
#define INSPECTSTATE_INSPECT_STATE_503   = "503"


#pragma MARK - 单位类型
/**
 * 监理单位：UNIT_00
 */
#define PRO_UNIT_00 = "UNIT_00";
/**
 * 建设单位：UNIT_01
 */
#define PRO_UNIT_01 = "UNIT_01";
/**
 * 施工单位：UNIT_02
 */
#define PRO_UNIT_02 = "UNIT_02";
/**
 * 检查单位：UNIT_03
 */
#define PRO_UNIT_03 = "UNIT_03";

#pragma MARK - 职务类型
/**总监*/
#define USER_01 = "USER_01";
/**总代*/
#define USER_02 = "USER_02";
/**监理*/
#define USER_03 = "USER_03";
/**监理安全工程师*/
#define USER_04 = "USER_04";
/**日志工程师*/
#define USER_05 = "USER_05";
/**施工单位项目经理*/
#define CONSTRACT_01 = "CONSTRACT_01";
/**施工单位总工*/
#define CONSTRACT_02 = "CONSTRACT_02";
/**施工单位安全总监*/
#define CONSTRACT_03 = "CONSTRACT_03";
/**施工单位质检员*/
#define CONSTRACT_04 = "CONSTRACT_04";
/**施工单位安全员*/
#define CONSTRACT_05 = "CONSTRACT_05";
/**施工单位实验员*/
#define CONSTRACT_06 = "CONSTRACT_06";
/**施工单位工长*/
#define CONSTRACT_07 = "CONSTRACT_07";
/**检查单位实验员(检测方)*/
#define CONSTRACT_08 = "CONSTRACT_08";
/**项目副经理*/
#define CONSTRACT_09 = "CONSTRACT_09";
/**建设单位领导*/
#define BUILD_01 = "BUILD_01";
/**建设单位工程部*/
#define BUILD_02 = "BUILD_02";
/**领导*/
#define LEADER_01 = "LEADER_01";




#endif /* CustomDefineHeader_h */


